﻿using BUS;
using DTO;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace QuanLyRapChieuPhim
{
    public partial class frmQuanLyPhongChieu : Form
    {
        private List<RapChieu> dsRap;
        private List<DinhDangPhim> dsDieuKienKT;
        private List<TinhTrangPhong> dsTinhTrangPhong;
        private BindingList<PhongChieu> dsPhongChieu = new BindingList<PhongChieu>();
        private string str_ThongTinPhong = "Thông tin phòng ";

        private int cbRapIndex;

        public frmQuanLyPhongChieu()
        {
            InitializeComponent();
        }

        private void frmQuanLyPhongChieu_Load(object sender, EventArgs e)
        {
            formatDataGridView();
            buttonStatus(true);

            btnThemPhong.Enabled = true;
            btnEdit.Enabled = false;

            loadDSRapPhim();
            loadDieuKienKT();
            loadTinhTrangPhong();
            dgvPhongChieu.DataSource = dsPhongChieu;
        }
        private void buttonStatus(bool status)
        {
            tsEditPhong.Enabled = status;
            tsAddPhong.Enabled = !status;

            btnThemPhong.Enabled = status;
            btnEdit.Enabled = !status;
            dgvPhongChieu.Enabled = !status;
        }

        private void tsAddPhong_Click(object sender, EventArgs e)
        {
            buttonStatus(true);
        }

        private void tsEditPhong_Click(object sender, EventArgs e)
        {
            buttonStatus(false);
        }

        private void loadDSRapPhim()
        {
            dsRap = PhongChieuBUS.layDSRap();
            if (dsRap.Count <= 0)
            {
                MessageBox.Show("Chưa có rạp nào trong hệ thống! \nXin mời thêm thông tin rạp trước khi thêm phòng", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                //gọi frm thêm rạp
                this.Close();
            }
            else
            {
                cbbRap.DataSource = dsRap;
                cbbRap.ValueMember = "MaRap";
                cbbRap.DisplayMember = "TenRap";
                
                colMaRap.DataSource = dsRap;
                colMaRap.ValueMember = "MaRap";
                colMaRap.DisplayMember = "TenRap";
            }
        }

        private void loadDieuKienKT()
        {
            dsDieuKienKT = PhongChieuBUS.layDSDieuKienKT();
            if (dsDieuKienKT.Count <= 0)
            {
                MessageBox.Show("Không load được điều kiện kỹ thuật.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                this.Close();
            }
            else
            {
                cbbDieuKienKT.DataSource = dsDieuKienKT;
                cbbDieuKienKT.ValueMember = "MaDinhDangPhim";
                cbbDieuKienKT.DisplayMember = "TenDinhDangPhim";
                
                colDieuKien.DataSource = dsDieuKienKT;
                colDieuKien.ValueMember = "MaDinhDangPhim";
                colDieuKien.DisplayMember = "TenDinhDangPhim";
            }
        }

        private void loadTinhTrangPhong()
        {
            dsTinhTrangPhong = PhongChieuBUS.layDSTinhTrangPhong();
            if (dsTinhTrangPhong.Count <= 0)
            {
                MessageBox.Show("Không load được tình trạng phòng.", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                this.Close();
            }
            else
            {
                cbTinhTrangPhong.DataSource = dsTinhTrangPhong;
                cbTinhTrangPhong.ValueMember = "MaTT";
                cbTinhTrangPhong.DisplayMember = "TenTT";

                colTinhTrang.DataSource = dsTinhTrangPhong;
                colTinhTrang.ValueMember = "MaTT";
                colTinhTrang.DisplayMember = "TenTT";
            }
        }

        private void loadDSPhongChieu(string maRap)
        {
            dsPhongChieu = PhongChieuBUS.getDSPhongChieuByMaRap(maRap);
            dgvPhongChieu.DataSource = dsPhongChieu;
        }

        private void formatDataGridView()
        {
            
            dgvPhongChieu.AllowUserToAddRows = false;
            dgvPhongChieu.RowHeadersVisible = false;
            //dgvPhongChieu.SelectionMode = DataGridViewSelectionMode.FullRowSelect;

            dgvPhongChieu.AlternatingRowsDefaultCellStyle.BackColor = Color.FromArgb(200, 220, 255);
            dgvPhongChieu.AutoGenerateColumns = false;
        }

        private void dgvPhongChieu_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
                PhongChieu pc = dsPhongChieu[e.RowIndex];
                cbbRap.SelectedValue = pc.MaRap;
                cbbDieuKienKT.SelectedValue = pc.MaDieuKienKT;
                txtTenPhong.Text = pc.TenPhong;
                cbTinhTrangPhong.SelectedValue = pc.MaTT;
                nudday.Value = pc.SoDay;
                nudHang.Value = pc.SoHang;
                txtMoTa.Text = pc.MoTaPC;
                grbThongTinPhong.Text = str_ThongTinPhong + pc.TenPhong + " - " + pc.MaPhong;
            }

        }

        private void btnThemPhong_Click(object sender, EventArgs e)
        {
            if (checkDataInput() == true)
            {
                int kq;
                PhongChieu pc = new PhongChieu();
                ganThongTinRap(pc);
                kq = PhongChieuBUS.ThemPhongChieu(pc);
                if (kq == 0)
                {
                    tbThanhCong("Thêm phòng thành công!");
                    dsPhongChieu = PhongChieuBUS.getDSPhongChieuByMaRap(dsRap[cbRapIndex].MaRap);
                    dgvPhongChieu.DataSource = dsPhongChieu;
                    grbThongTinPhong.Text = str_ThongTinPhong + pc.TenPhong;
                }
                else
                {
                    thongBaoLoi("Thêm phòng thất bại");
                }
            }

        }

        private void ganThongTinRap(PhongChieu pc)
        {
            pc.MaRap = (string)cbbRap.SelectedValue;
            pc.TenPhong = txtTenPhong.Text;
            pc.MaDieuKienKT = (int)cbbDieuKienKT.SelectedValue;
            pc.MaTT = (int)cbTinhTrangPhong.SelectedValue;
            pc.SoDay = (int)nudday.Value;
            pc.SoHang = (int)nudHang.Value;
            pc.MoTaPC = txtMoTa.Text;
        }

        private void thongBaoLoi(string tb)
        {
            MessageBox.Show(tb, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        private void tbThanhCong(string tb)
        {
            MessageBox.Show(tb, "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void btnEdit_Click(object sender, EventArgs e)
        {
            if (dgvPhongChieu.SelectedRows.Count == 0)
            {
                thongBaoLoi("Bạn chưa chọn phòng chiếu để sữa.");
            }
            else if (nudday.Value <= 0 || nudHang.Value < 0)
            {
                thongBaoLoi("Số hàng ghế và số dãy ghế không được nhỏ hơn 0");
            }
            else if (txtMoTa.Text.Length < 10)
            {
                thongBaoLoi("Mô tả không được nhỏ hơn 10 ký tự");
            }
            else
            {
                int kq;
                PhongChieu pc = dsPhongChieu[dgvPhongChieu.SelectedRows[0].Index];
                ganThongTinRap(pc);
                kq = PhongChieuBUS.capNhatPhong(pc);
                //kq = pcBus.capNhatPhong(pc);
                kq = PhongChieuBUS.capNhatPhong(pc);
                if (kq == 0)
                {
                    tbThanhCong("Cập nhật thông tin phòng thành công");
                    dsPhongChieu[dgvPhongChieu.SelectedRows[0].Index] = pc;
                    grbThongTinPhong.Text = str_ThongTinPhong + pc.TenPhong +" - "+ pc.MaPhong;
                }
                else
                {
                    thongBaoLoi("Cập nhật phòng thất bại ");
                }
            }
        }

        private Boolean checkDataInput()
        {
            if (nudday.Value <= 0 || nudHang.Value <= 0)
            {
                thongBaoLoi("Số hàng ghế và số dãy ghế không được nhỏ hơn 0");
                return false;
            }
            else if (txtMoTa.Text.Length < 10)
            {
                thongBaoLoi("Mô tả không được nhỏ hơn 10 ký tự");
                return false;
            }
            else if (txtTenPhong.Text.Length < 5 || txtTenPhong.Text.Length > 20)
            {
                thongBaoLoi("Tên phòng không được nhỏ hơn 5 và lớn hơn 20 ký tự");
                return false;
            }
            return true;
        }

        private void cbbRap_SelectedIndexChanged(object sender, EventArgs e)
        {
            RapChieu rp = (RapChieu)cbbRap.SelectedItem;
            cbRapIndex = cbbRap.SelectedIndex;
            txtMoTa.Text = null;
            nudHang.Value = 1;
            nudday.Value = 1;
            txtTenPhong.Text = null;
            grbThongTinPhong.Text = "Chi tiết phòng chiếu";
            grbChiTietRap.Text = "Chi tiết phòng chiếu của rạp " + rp.TenRap;
            loadDSPhongChieu(rp.MaRap);

        }
    }
}
